#include "mythread.hpp"
#include<unordered_map>
#include<memory>
#include<vector>
#define NUM 10


// using thread_ptr_t=std::shared_ptr<ThreadMode::mythread>;


// void conut(int max)
// {
//     for(int i=0;i<max;i++)
//     {
//         std::cout<<"i=="<<i<<std::endl;
//         sleep(1);
//     }
// }

//对全局变量进进行加锁
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
int ticknum=10000;

void count()
{
    while (true)
    {
        pthread_mutex_lock(&lock);//加锁
        if(ticknum>0)
        {
            usleep(1000);
            printf("get a new ticke,id:%d\n",ticknum--);
            pthread_mutex_unlock(&lock);//解锁
        }
        else{
            pthread_mutex_unlock(&lock);//解锁
        }
    }
    return;
}
int main()
{
    std::vector<ThreadMode::mythread> t;
    
    // ThreadMode::mythread<int> t(conut,10);
    for(int i=0;i<NUM;i++)
    {
        t.emplace_back(count);
    }
    //多线程的启动
    for(auto &e:t)
    {
        e.strat();
    }
    //线程等待
    for(auto &e:t)
    {
        e.join();
    }

    // t.strat();

    
    // t.join();

    // //多线程的使用
    // std::unordered_map<std::string,thread_ptr_t> thread;
    // for(int i=0;i<NUM i++)
    // {
    //     thread_ptr_t t=std::make_shared<ThreadMode::mythread>([](){
    //         while (1)
    //         {
    //             std::cout<<"hello word "<<std::endl;
    //             sleep(1);
    //         }
    //     });
    //     thread[t->Name()]=t;
    // }

    // for(auto &e:thread){
    //     e.second->strat();
    // }

    // for(auto &e:thread){
    //     e.second->join();
    // }

    // ThreadMode::mythread t([](){
    //     while (1)
    //     {
    //         std::cout<<"hello word "<<std::endl;
    //         sleep(1);
    //     }
        
    // });

    // t.strat();
    // std::cout<<t.Name()<<"is ruaming"<<std::endl;
    // sleep(5);

    // t.Stop();
    //  std::cout<<"stop thread:"<<std::endl;
    // sleep(1);

    // t.join();
    //  std::cout<<"join thread:"<<std::endl;
    // sleep(1);

    return 0;
}